iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
AI/ ML & Data

使用 jq 處理資料系列 第 17

Day17: 練習用 jq 追颱風消息 - 字串 Slice 和 Split

  • 分享至 

  • xImage
  •  

颱風開始向北走了,我們繼續看看颱風警報的資料吧。

https://ithelp.ithome.com.tw/upload/images/20241001/20078389kTEUCrjMHS.png

對話中學習

師傅:今天我們來學 jq 的 字串切片(Slice) 和分割(Split)。準備好了嗎?

徒弟:呃...是的,師傅。我會盡力跟上的。

師傅:好。先看切片(Slice)。

徒弟:切片?是指 .fixTime[0:13] 嗎?

師傅:對。效果?

徒弟:呃...是取 fixTime 的前 13 個字,把時間顯示縮短到小時?

師傅:沒錯。現在再看分割(Split)。

徒弟:哦,是 split(\",\") 對吧?

師傅:嗯。.coordinate|split(\",\")[0] 用途?

徒弟:這是...先把 coordinate 用逗號分開,然後取第一部分,也就是經度?

師傅:正確。那緯度呢?

徒弟:應該是 .coordinate|split(\",\")[1] 吧?

師傅:正確。組合起來。

徒弟:讓我試試... .fixTime[0:13], (.coordinate | split(\",\")[0]), (.coordinate | split(\",\")[1]) 這樣?

師傅:👍


陣列或字串的切片 (Slice)

在 jq 中,array/string slice 是用來從陣列或字串中提取一部分內容的語法。用法和使用索引提取陣列元素一樣,只是多使用 : 取得範圍。

從第 0 個位置開始,到第 13 個位置之前
https://ithelp.ithome.com.tw/upload/images/20241001/20078389I42uZukEYa.png
jq -c '.[0:13]'
https://ithelp.ithome.com.tw/upload/images/20241001/20078389tHwpBvkPxM.png

字串的分割 (Split)

在 jq 中,split({分割字}) 用於將字串按指定的分隔符拆分成陣列。剛好可以用來分割經度和緯度。

https://ithelp.ithome.com.tw/upload/images/20241001/20078389SEixFEfp8i.png
https://ithelp.ithome.com.tw/upload/images/20241001/200783898727dqOWq9.png

結論

今天學到了字串的 Slice 和 Split,很實用,正好可以應用在颱風消息的時間和經緯度欄位上。slice要注意的部分就是索引範圍了,從0起跳,結尾索引不包含在內;split要注意的,是引號 😝,像我切換於命令提示字元和 jqplay 工具之間,就遇到不少次引號的差異問題。今天對話中還有一個新用法,就是 () 括弧內的優先運算,如 (.coordinate | split(\",\")[0])

感謝今天自己認真學習😄。山陀兒颱風已經是強颱了,注意安全,祝平安。


上一篇
Day16: 練習用 jq 追颱風消息
下一篇
Day18: 練習用 jq 追颱風消息 - @tsv
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
hlb
iT邦新手 5 級 ‧ 2024-11-11 11:42:16

既然經度和緯度都會用到,可以更懶惰一點,把 split 的結果直接傳遞給下一步唷。

.coordinate | split(",") | {longitude: .[0], latitude: .[1]}

我要留言

立即登入留言